//三步问题

class Solution {
public:
    int waysToStep(int n) {
        if(n==1) return 1;
        if(n==2) return 2;
        if(n==3) return 4;

        vector<int> v(n+1);
        v[1]=1;v[2]=2;v[3]=4;
        for(int i=4;i<=n;++i)
        {
            v[i]=(((v[i-1]+v[i-2])%1000000007)+v[i-3])%1000000007;
        }
       return v[n];
    }
};


//最小花费爬楼梯
class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int sz=cost.size();
        if(sz==2)
        return min(cost[0],cost[1]);

        vector<int> dp(sz+1);
        dp[0]=0;
        dp[1]=0;
        for(int i=2;i<=sz;++i)
        {
            dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
        }
        return dp[sz];
    }
};